# -*- coding: utf-8 -*-

"""
 *
 * - Ime
 *
 *  - kratki opis
 *
 * Autori: Koki007
 * Verzija: 0.1
 * Datum: 04.01.2011
 *
"""

#from objekti import cObjekt

# TODO: OVO BI TREBALO UPDATEATI I KOMENTIRATI - kolko je stvarno korisno ovo?
# omogucuje da se elementi grupiraju u slojeve i crtaju po redoslijedu
class cSloj:

    def __init__(self, interaktivni):
        #self.lista_pokretnih = []
        #self.lista_nepokretnih = []
        self.lista_objekata = []
        self.interaktivni = interaktivni
        pass


    def azuriraj(self):
        for objekt in self.lista_objekata:
            objekt.azuriraj()
            if objekt.je_izbrisan(): self.lista_objekata.remove(objekt)


    def dodaj_objekt(self, objekt):
        self.lista_objekata.append(objekt)


    # salje listu svih objekata
    def lista_objekta(self):
        return self.lista_objekata


    def lista_objekata_u_radiusu(self, objekt, radius):
        pass

    def lista_objekta_po_osi(self):
        pass

    def lista_objekta_unutar_pravokutnika(self):
        pass


# koristi za grupiranje svih elemenata u levelu i njihovo manipuliranje (pogutovo kad/ako ce se ici u optimizaciju)
class cMapa:

    def __init__(self, engine):
        self.slojevi = {}
        self.engine = engine
        pass


    # poziva azuriranje za sve objekte u svim slojevima
    # unutar interaktivnog sloja provjerava sudare izmedu svih objekta u tom sloju
    def azuriraj(self):
        for sloj in self.slojevi:
            self.slojevi[sloj].azuriraj()



    # dodaje objekt u neki sloje mape
    # vrijednosti za sloj su brojcane: 0 - background, 1 - interaktivni sloj, 2 - foreground
    def dodaj_objekt(self, sloj, objekt):
        objekt.povezi_sa_mapom(self, sloj)
        self.slojevi[sloj].dodaj_objekt(objekt)
        pass


    def dodaj_u_mrezu(self, sloj,  objekt, x, y,  velicina_polja_x,  velicina_polja_y):
        objekt.postavi_na_koordinate(x * velicina_polja_x, y * velicina_polja_y)
        self.dodaj_objekt(sloj,  objekt)
        pass


    # !TEMP??
    def dodaj_liniju(self, klasa, sloj, slika,  x1,  x2,  y, velicina_polja_x,  velicina_polja_y):
        for x in range(x1,  x2):
                objekt = klasa(self.engine, slika,  0,  0)
                self.dodaj_u_mrezu(sloj, objekt,  x,  y, velicina_polja_x,  velicina_polja_y)

    # vrati popis svih objekta unutar zadanog sloja
    def lista_objekta_sloj(self, sloj):
        return self.slojevi[sloj].lista_objekta()

    # vrati popis svih objekata iz svih slojeva koji su interaktivni
    def lista_svih_interaktivnih_objekata(self):
        lista = []
        for sloj in self.slojevi:
            if self.slojevi[sloj].interaktivni:
                lista += self.slojevi[sloj].lista_objekta()
        return lista


    # vrati popis objekta u interaktivnom sloju koji su unutar radiusa oko zadanog objekta
    def lista_objekata_u_radiusu(self, objekt, radius):
        pass


    def dodaj_sloj(self, ime, interaktivni):
        self.slojevi[ime] = cSloj(interaktivni)


    def brisi_sloj(self, ime):
        del self.slojevi[ime]


    def zapisi_u_datoteku(self,  datoteka):
        pass

    def ucitaj_iz_datoteke(self,  datoteka):
        pass

